﻿#ifndef VECTOR3D_H
#define VECTOR3D_H

class Vector3D
{

public:
    Vector3D() = default;
    virtual ~Vector3D() = default;
    /**
     * @brief 构造函数
     * @param x x的值
     * @param y y的值
     * @param z z的值
     * @since 1.0.0
     */
    Vector3D(float x, float y, float z);
    /**
     * @brief 返回点的x值
     * @return 该点的x值
     * @since 1.0.0
     */
    float x() const;
    /**
     * @brief 设置点的x值
     * @param x 要赋值给x的值
     * @since 1.0.0
     */
    void setX(float x);
    /**
     * @brief 返回点的y值
     * @return 该点的y值
     * @since 1.0.0
     */
    float y() const;
    /**
     * @brief 设置点的x值
     * @param y 要赋值给y的值
     * @since 1.0.0
     */
    void setY(float y);
    /**
     * @brief 返回点的z值
     * @return 该点的z值
     * @since 1.0.0
     */
    float z() const;
    /**
     * @brief 设置点的z值
     * @param z 要赋值给z的值
     * @since 1.0.0
     */
    void setZ(float z);


    bool sameWith(Vector3D *p, const float &precision = 1e-5) const;
protected:
    /**
     * @brief [me]的x值
     * @since 1.0.0
     */
    float m_X = 0.0;
    /**
     * @brief [me]的y值
     * @since 1.0.0
     */
    float m_Y = 0.0;
    /**
     * @brief [me]的z值
     * @since 1.0.0
     */
    float m_Z = 0.0;
};

#endif // VECTOR3D_H
